//package com.example.controller;
//
//import com.alibaba.fastjson.JSON;
//import lombok.SneakyThrows;
//import org.eclipse.paho.client.mqttv3.*;
//import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.ApplicationArguments;
//import org.springframework.boot.ApplicationRunner;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @program: mqtt
// * @description:发布
// * @author:fanzhihui
// * @create: 2021-11-18 11:13
// **/
//@RestController
//@RequestMapping("/mqtt")
//public class MqttController implements ApplicationRunner {
//
////
////    @Autowired
////    private MqttCacheDataHandle mqttCacheDataHandle;
//
//    @Autowired
//    public  Rundrools rundrools;
//    @Value("${web.mqtt-clientid}")
//    private String mqttclientid;
//    @Override
//    public void run(ApplicationArguments args) throws Exception {
//        //String HOST = "tcp://iot.situos.cn:1883";  //虚拟机的ip
//        String HOST = "tcp://iot.situos.cn:1883";  //虚拟机的ip
//        String TOPIC = "OfforOnline";   //订阅的主题
//        int qos = 1;
//
//
//
//
//        //客户端id不能与别的项目的客户端id重复【不可重复】
//        // String clientid = "检测客户端上下线的主题Drools";//【赤峰】
//        //String clientid = "检测客户端上下线的主题-RuleEngineForXAJD";//【西交大】
//        String clientid = "检测客户端上下线的主题-RuleEngineFor";//【西交大】
//        try {
//            // host为主机名，test为clientid即连接MQTT的客户端ID，一般以客户端唯一标识符表示，MemoryPersistence设置clientid的保存形式，默认为以内存保存
//            MqttClient client = new MqttClient(HOST, clientid, new MemoryPersistence());
//            // MQTT的连接设置
//            MqttConnectOptions options = new MqttConnectOptions();
//            options.setUserName("yunsitu");
//            options.setPassword("Yst123@456".toCharArray());
//            // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录，这里设置为true表示每次连接到服务器都以新的身份连接
//            options.setCleanSession(true);
//            // 设置超时时间 单位为秒
//            options.setConnectionTimeout(10);
//            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线，但这个方法并没有重连的机制
//            options.setKeepAliveInterval(60);
//            // 设置回调函数
//            options.setAutomaticReconnect(true);
//            client.connect(options);
//            // 订阅消息
//            client.subscribe(TOPIC, qos);
//
//            client.setCallback(new MqttCallbackExtended() {
//
//                @SneakyThrows
//                @Override
//                public void connectComplete(boolean reconnect, String serverURI) {
//                    client.subscribe(TOPIC, qos);
//
//
//                }
//
//                public void connectionLost(Throwable cause) {
//
//                }
//
//                public void messageArrived(String topic, MqttMessage message)  {
//
//
//                    //在这里接收到mqtt客户端上下线的情况   并且把客户端上下线情况记录下来
//                    Map<String,Object> map = JSON.parseObject(new String(message.getPayload()), HashMap.class);
//                    String online = (String) map.get("online");
//                    String clientid = (String) map.get("clientid");
//                    if (clientid.contains("jlb")){}
//                    else {
//                        if("online".equals(online)) {
//                            //当客户端上线的时候，有可能新增测点或者新增变量，调用一下存入mysql数据库的操作  并且记录一下客户端的上线的情况
//                            //  mqttCacheDataHandle.pushMysql();
//
//                             rundrools.data();
//
//                        }else {
//                            //TODO 记录一下客户端的下线的情况
//
//                        }
//                    }
//                }
//                public void deliveryComplete(IMqttDeliveryToken token) {
//
//                }
//
//            });
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//}
//
